/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package mx.edu.itschapala.sistemas.septimo.control;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import mx.edu.itschapala.sistemas.septimo.modelo.Venta;
import mx.edu.itschapala.sistemas.septimo.vista.enumeracion.TiposBusqueda;

/**
 *
 * @author Estudiante
 */
public class VentaLnArchivo implements VentaLnLocal{
    private List<Venta> lista = new ArrayList<Venta>();

    public VentaLnArchivo() {
        llenarL();
    }

    @Override
    public void registrar(Venta venta) {
        try {
            FileOutputStream file = new FileOutputStream("ventas.txt");
            ObjectOutputStream out = new ObjectOutputStream(file);
            lista.add(venta);
            for (Venta p : lista) {
                out.writeObject(p);
            }
            out.close();
        } catch (Exception e) {
            System.out.println("Error en el archivo");
        }
    }

    @Override
    public void modificar(Venta venta) {
        int pos = -1;
        try {

            for (int x = 0; x < lista.size(); x++) {
                if (lista.get(x).getId() == venta.getId()) {
                    pos = x;

                }
            }
            if (pos != -1) {
                lista.set(pos, venta);
            }
            FileOutputStream file = new FileOutputStream("ventas.txt");
            ObjectOutputStream out = new ObjectOutputStream(file);
            for (Venta p : lista) {
                out.writeObject(p);
            }
            //out.writeObject(producto);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("error en modificar");
        }
    }

    @Override
    public void eliminar(Venta venta) {
        int pos = -1;
        try {

            for (int x = 0; x < lista.size(); x++) {
                if (lista.get(x).getId() == venta.getId()) {
                    pos = x;

                }
            }
            if (pos != -1) {
                lista.remove(pos);
            }
            //Aqui
            FileOutputStream file = new FileOutputStream("ventas.txt");
            ObjectOutputStream out = new ObjectOutputStream(file);
            for (Venta p : lista) {
                out.writeObject(p);
            }
            //out.writeObject(producto);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("error en eliminar");
        }
    }

    @Override
    public Venta buscarPorCodigo(int codigo) {
        int pos = -1;
        try {

            for (int x = 0; x < lista.size(); x++) {
                if (lista.get(x).getId() == codigo) {
                    pos = x;

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("error en buscar Por Codigo");
        }
        if (pos != -1) {
            return lista.get(pos);
        } else {
            return null;
        }
    }

    @Override
    public List<Venta> getTodos() {
        return lista;
    }

    private void llenarL() {
        lista = new ArrayList<Venta>();
        try {
            FileInputStream file = new FileInputStream("ventas.txt");
            ObjectInputStream in = new ObjectInputStream(file);
            Object o = in.readObject();
            while (o != null) {
                lista.add((Venta) o);
                o = in.readObject();

            }
            in.close();
        } catch (Exception e) {
        }
    }

    @Override
    public List<Venta> getProNombre(String nombre, TiposBusqueda criterio) {
        List<Venta> tmp = new ArrayList<Venta>();
        switch (criterio) {
            case INICIA:
                for (Venta p : lista) {
                    if (p.getFecha().startsWith(nombre)) {
                        tmp.add(p);
                    }
                }
                break;
            case CONTIENE:
                for (Venta p : lista) {
                    if (p.getFecha().contains(nombre)) {
                        tmp.add(p);
                    }
                }
                break;
        }
        return tmp;
    }
}
